
#ifndef __MACO_PP_SIZE_H__
#define __MACO_PP_SIZE_H__

#include <maco/basic.h>

#ifdef _MSC_VER

#define __MACO_pp_size_(...)  \
   __MACO_paste(__MACO_pp_size_i(__VA_ARGS__, \
      999, 998, 997, 996, 995, 994, 993, 992, 991, 990, \
      989, 988, 987, 986, 985, 984, 983, 982, 981, 980, \
      979, 978, 977, 976, 975, 974, 973, 972, 971, 970, \
      969, 968, 967, 966, 965, 964, 963, 962, 961, 960, \
      959, 958, 957, 956, 955, 954, 953, 952, 951, 950, \
      949, 948, 947, 946, 945, 944, 943, 942, 941, 940, \
      939, 938, 937, 936, 935, 934, 933, 932, 931, 930, \
      929, 928, 927, 926, 925, 924, 923, 922, 921, 920, \
      919, 918, 917, 916, 915, 914, 913, 912, 911, 910, \
      909, 908, 907, 906, 905, 904, 903, 902, 901, 900, \
      899, 898, 897, 896, 895, 894, 893, 892, 891, 890, \
      889, 888, 887, 886, 885, 884, 883, 882, 881, 880, \
      879, 878, 877, 876, 875, 874, 873, 872, 871, 870, \
      869, 868, 867, 866, 865, 864, 863, 862, 861, 860, \
      859, 858, 857, 856, 855, 854, 853, 852, 851, 850, \
      849, 848, 847, 846, 845, 844, 843, 842, 841, 840, \
      839, 838, 837, 836, 835, 834, 833, 832, 831, 830, \
      829, 828, 827, 826, 825, 824, 823, 822, 821, 820, \
      819, 818, 817, 816, 815, 814, 813, 812, 811, 810, \
      809, 808, 807, 806, 805, 804, 803, 802, 801, 800, \
      799, 798, 797, 796, 795, 794, 793, 792, 791, 790, \
      789, 788, 787, 786, 785, 784, 783, 782, 781, 780, \
      779, 778, 777, 776, 775, 774, 773, 772, 771, 770, \
      769, 768, 767, 766, 765, 764, 763, 762, 761, 760, \
      759, 758, 757, 756, 755, 754, 753, 752, 751, 750, \
      749, 748, 747, 746, 745, 744, 743, 742, 741, 740, \
      739, 738, 737, 736, 735, 734, 733, 732, 731, 730, \
      729, 728, 727, 726, 725, 724, 723, 722, 721, 720, \
      719, 718, 717, 716, 715, 714, 713, 712, 711, 710, \
      709, 708, 707, 706, 705, 704, 703, 702, 701, 700, \
      699, 698, 697, 696, 695, 694, 693, 692, 691, 690, \
      689, 688, 687, 686, 685, 684, 683, 682, 681, 680, \
      679, 678, 677, 676, 675, 674, 673, 672, 671, 670, \
      669, 668, 667, 666, 665, 664, 663, 662, 661, 660, \
      659, 658, 657, 656, 655, 654, 653, 652, 651, 650, \
      649, 648, 647, 646, 645, 644, 643, 642, 641, 640, \
      639, 638, 637, 636, 635, 634, 633, 632, 631, 630, \
      629, 628, 627, 626, 625, 624, 623, 622, 621, 620, \
      619, 618, 617, 616, 615, 614, 613, 612, 611, 610, \
      609, 608, 607, 606, 605, 604, 603, 602, 601, 600, \
      599, 598, 597, 596, 595, 594, 593, 592, 591, 590, \
      589, 588, 587, 586, 585, 584, 583, 582, 581, 580, \
      579, 578, 577, 576, 575, 574, 573, 572, 571, 570, \
      569, 568, 567, 566, 565, 564, 563, 562, 561, 560, \
      559, 558, 557, 556, 555, 554, 553, 552, 551, 550, \
      549, 548, 547, 546, 545, 544, 543, 542, 541, 540, \
      539, 538, 537, 536, 535, 534, 533, 532, 531, 530, \
      529, 528, 527, 526, 525, 524, 523, 522, 521, 520, \
      519, 518, 517, 516, 515, 514, 513, 512, 511, 510, \
      509, 508, 507, 506, 505, 504, 503, 502, 501, 500, \
      499, 498, 497, 496, 495, 494, 493, 492, 491, 490, \
      489, 488, 487, 486, 485, 484, 483, 482, 481, 480, \
      479, 478, 477, 476, 475, 474, 473, 472, 471, 470, \
      469, 468, 467, 466, 465, 464, 463, 462, 461, 460, \
      459, 458, 457, 456, 455, 454, 453, 452, 451, 450, \
      449, 448, 447, 446, 445, 444, 443, 442, 441, 440, \
      439, 438, 437, 436, 435, 434, 433, 432, 431, 430, \
      429, 428, 427, 426, 425, 424, 423, 422, 421, 420, \
      419, 418, 417, 416, 415, 414, 413, 412, 411, 410, \
      409, 408, 407, 406, 405, 404, 403, 402, 401, 400, \
      399, 398, 397, 396, 395, 394, 393, 392, 391, 390, \
      389, 388, 387, 386, 385, 384, 383, 382, 381, 380, \
      379, 378, 377, 376, 375, 374, 373, 372, 371, 370, \
      369, 368, 367, 366, 365, 364, 363, 362, 361, 360, \
      359, 358, 357, 356, 355, 354, 353, 352, 351, 350, \
      349, 348, 347, 346, 345, 344, 343, 342, 341, 340, \
      339, 338, 337, 336, 335, 334, 333, 332, 331, 330, \
      329, 328, 327, 326, 325, 324, 323, 322, 321, 320, \
      319, 318, 317, 316, 315, 314, 313, 312, 311, 310, \
      309, 308, 307, 306, 305, 304, 303, 302, 301, 300, \
      299, 298, 297, 296, 295, 294, 293, 292, 291, 290, \
      289, 288, 287, 286, 285, 284, 283, 282, 281, 280, \
      279, 278, 277, 276, 275, 274, 273, 272, 271, 270, \
      269, 268, 267, 266, 265, 264, 263, 262, 261, 260, \
      259, 258, 257, 256, 255, 254, 253, 252, 251, 250, \
      249, 248, 247, 246, 245, 244, 243, 242, 241, 240, \
      239, 238, 237, 236, 235, 234, 233, 232, 231, 230, \
      229, 228, 227, 226, 225, 224, 223, 222, 221, 220, \
      219, 218, 217, 216, 215, 214, 213, 212, 211, 210, \
      209, 208, 207, 206, 205, 204, 203, 202, 201, 200, \
      199, 198, 197, 196, 195, 194, 193, 192, 191, 190, \
      189, 188, 187, 186, 185, 184, 183, 182, 181, 180, \
      179, 178, 177, 176, 175, 174, 173, 172, 171, 170, \
      169, 168, 167, 166, 165, 164, 163, 162, 161, 160, \
      159, 158, 157, 156, 155, 154, 153, 152, 151, 150, \
      149, 148, 147, 146, 145, 144, 143, 142, 141, 140, \
      139, 138, 137, 136, 135, 134, 133, 132, 131, 130, \
      129, 128, 127, 126, 125, 124, 123, 122, 121, 120, \
      119, 118, 117, 116, 115, 114, 113, 112, 111, 110, \
      109, 108, 107, 106, 105, 104, 103, 102, 101, 100, \
      99, 98, 97, 96, 95, 94, 93, 92, 91, 90, \
      89, 88, 87, 86, 85, 84, 83, 82, 81, 80, \
      79, 78, 77, 76, 75, 74, 73, 72, 71, 70, \
      69, 68, 67, 66, 65, 64, 63, 62, 61, 60, \
      59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \
      49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \
      39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \
      29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \
      19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \
      9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
      ), __MACO_empty())

#else

#define __MACO_pp_size_(...)     \
   __MACO_pp_size_i(__VA_ARGS__, \
      999, 998, 997, 996, 995, 994, 993, 992, 991, 990, \
      989, 988, 987, 986, 985, 984, 983, 982, 981, 980, \
      979, 978, 977, 976, 975, 974, 973, 972, 971, 970, \
      969, 968, 967, 966, 965, 964, 963, 962, 961, 960, \
      959, 958, 957, 956, 955, 954, 953, 952, 951, 950, \
      949, 948, 947, 946, 945, 944, 943, 942, 941, 940, \
      939, 938, 937, 936, 935, 934, 933, 932, 931, 930, \
      929, 928, 927, 926, 925, 924, 923, 922, 921, 920, \
      919, 918, 917, 916, 915, 914, 913, 912, 911, 910, \
      909, 908, 907, 906, 905, 904, 903, 902, 901, 900, \
      899, 898, 897, 896, 895, 894, 893, 892, 891, 890, \
      889, 888, 887, 886, 885, 884, 883, 882, 881, 880, \
      879, 878, 877, 876, 875, 874, 873, 872, 871, 870, \
      869, 868, 867, 866, 865, 864, 863, 862, 861, 860, \
      859, 858, 857, 856, 855, 854, 853, 852, 851, 850, \
      849, 848, 847, 846, 845, 844, 843, 842, 841, 840, \
      839, 838, 837, 836, 835, 834, 833, 832, 831, 830, \
      829, 828, 827, 826, 825, 824, 823, 822, 821, 820, \
      819, 818, 817, 816, 815, 814, 813, 812, 811, 810, \
      809, 808, 807, 806, 805, 804, 803, 802, 801, 800, \
      799, 798, 797, 796, 795, 794, 793, 792, 791, 790, \
      789, 788, 787, 786, 785, 784, 783, 782, 781, 780, \
      779, 778, 777, 776, 775, 774, 773, 772, 771, 770, \
      769, 768, 767, 766, 765, 764, 763, 762, 761, 760, \
      759, 758, 757, 756, 755, 754, 753, 752, 751, 750, \
      749, 748, 747, 746, 745, 744, 743, 742, 741, 740, \
      739, 738, 737, 736, 735, 734, 733, 732, 731, 730, \
      729, 728, 727, 726, 725, 724, 723, 722, 721, 720, \
      719, 718, 717, 716, 715, 714, 713, 712, 711, 710, \
      709, 708, 707, 706, 705, 704, 703, 702, 701, 700, \
      699, 698, 697, 696, 695, 694, 693, 692, 691, 690, \
      689, 688, 687, 686, 685, 684, 683, 682, 681, 680, \
      679, 678, 677, 676, 675, 674, 673, 672, 671, 670, \
      669, 668, 667, 666, 665, 664, 663, 662, 661, 660, \
      659, 658, 657, 656, 655, 654, 653, 652, 651, 650, \
      649, 648, 647, 646, 645, 644, 643, 642, 641, 640, \
      639, 638, 637, 636, 635, 634, 633, 632, 631, 630, \
      629, 628, 627, 626, 625, 624, 623, 622, 621, 620, \
      619, 618, 617, 616, 615, 614, 613, 612, 611, 610, \
      609, 608, 607, 606, 605, 604, 603, 602, 601, 600, \
      599, 598, 597, 596, 595, 594, 593, 592, 591, 590, \
      589, 588, 587, 586, 585, 584, 583, 582, 581, 580, \
      579, 578, 577, 576, 575, 574, 573, 572, 571, 570, \
      569, 568, 567, 566, 565, 564, 563, 562, 561, 560, \
      559, 558, 557, 556, 555, 554, 553, 552, 551, 550, \
      549, 548, 547, 546, 545, 544, 543, 542, 541, 540, \
      539, 538, 537, 536, 535, 534, 533, 532, 531, 530, \
      529, 528, 527, 526, 525, 524, 523, 522, 521, 520, \
      519, 518, 517, 516, 515, 514, 513, 512, 511, 510, \
      509, 508, 507, 506, 505, 504, 503, 502, 501, 500, \
      499, 498, 497, 496, 495, 494, 493, 492, 491, 490, \
      489, 488, 487, 486, 485, 484, 483, 482, 481, 480, \
      479, 478, 477, 476, 475, 474, 473, 472, 471, 470, \
      469, 468, 467, 466, 465, 464, 463, 462, 461, 460, \
      459, 458, 457, 456, 455, 454, 453, 452, 451, 450, \
      449, 448, 447, 446, 445, 444, 443, 442, 441, 440, \
      439, 438, 437, 436, 435, 434, 433, 432, 431, 430, \
      429, 428, 427, 426, 425, 424, 423, 422, 421, 420, \
      419, 418, 417, 416, 415, 414, 413, 412, 411, 410, \
      409, 408, 407, 406, 405, 404, 403, 402, 401, 400, \
      399, 398, 397, 396, 395, 394, 393, 392, 391, 390, \
      389, 388, 387, 386, 385, 384, 383, 382, 381, 380, \
      379, 378, 377, 376, 375, 374, 373, 372, 371, 370, \
      369, 368, 367, 366, 365, 364, 363, 362, 361, 360, \
      359, 358, 357, 356, 355, 354, 353, 352, 351, 350, \
      349, 348, 347, 346, 345, 344, 343, 342, 341, 340, \
      339, 338, 337, 336, 335, 334, 333, 332, 331, 330, \
      329, 328, 327, 326, 325, 324, 323, 322, 321, 320, \
      319, 318, 317, 316, 315, 314, 313, 312, 311, 310, \
      309, 308, 307, 306, 305, 304, 303, 302, 301, 300, \
      299, 298, 297, 296, 295, 294, 293, 292, 291, 290, \
      289, 288, 287, 286, 285, 284, 283, 282, 281, 280, \
      279, 278, 277, 276, 275, 274, 273, 272, 271, 270, \
      269, 268, 267, 266, 265, 264, 263, 262, 261, 260, \
      259, 258, 257, 256, 255, 254, 253, 252, 251, 250, \
      249, 248, 247, 246, 245, 244, 243, 242, 241, 240, \
      239, 238, 237, 236, 235, 234, 233, 232, 231, 230, \
      229, 228, 227, 226, 225, 224, 223, 222, 221, 220, \
      219, 218, 217, 216, 215, 214, 213, 212, 211, 210, \
      209, 208, 207, 206, 205, 204, 203, 202, 201, 200, \
      199, 198, 197, 196, 195, 194, 193, 192, 191, 190, \
      189, 188, 187, 186, 185, 184, 183, 182, 181, 180, \
      179, 178, 177, 176, 175, 174, 173, 172, 171, 170, \
      169, 168, 167, 166, 165, 164, 163, 162, 161, 160, \
      159, 158, 157, 156, 155, 154, 153, 152, 151, 150, \
      149, 148, 147, 146, 145, 144, 143, 142, 141, 140, \
      139, 138, 137, 136, 135, 134, 133, 132, 131, 130, \
      129, 128, 127, 126, 125, 124, 123, 122, 121, 120, \
      119, 118, 117, 116, 115, 114, 113, 112, 111, 110, \
      109, 108, 107, 106, 105, 104, 103, 102, 101, 100, \
      99, 98, 97, 96, 95, 94, 93, 92, 91, 90, \
      89, 88, 87, 86, 85, 84, 83, 82, 81, 80, \
      79, 78, 77, 76, 75, 74, 73, 72, 71, 70, \
      69, 68, 67, 66, 65, 64, 63, 62, 61, 60, \
      59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \
      49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \
      39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \
      29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \
      19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \
      9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
      )

#endif

#define __MACO_pp_size_i( \
      e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, \
      e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, \
      e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, \
      e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, \
      e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, \
      e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, \
      e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, \
      e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, \
      e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, \
      e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, \
      e100, e101, e102, e103, e104, e105, e106, e107, e108, e109, \
      e110, e111, e112, e113, e114, e115, e116, e117, e118, e119, \
      e120, e121, e122, e123, e124, e125, e126, e127, e128, e129, \
      e130, e131, e132, e133, e134, e135, e136, e137, e138, e139, \
      e140, e141, e142, e143, e144, e145, e146, e147, e148, e149, \
      e150, e151, e152, e153, e154, e155, e156, e157, e158, e159, \
      e160, e161, e162, e163, e164, e165, e166, e167, e168, e169, \
      e170, e171, e172, e173, e174, e175, e176, e177, e178, e179, \
      e180, e181, e182, e183, e184, e185, e186, e187, e188, e189, \
      e190, e191, e192, e193, e194, e195, e196, e197, e198, e199, \
      e200, e201, e202, e203, e204, e205, e206, e207, e208, e209, \
      e210, e211, e212, e213, e214, e215, e216, e217, e218, e219, \
      e220, e221, e222, e223, e224, e225, e226, e227, e228, e229, \
      e230, e231, e232, e233, e234, e235, e236, e237, e238, e239, \
      e240, e241, e242, e243, e244, e245, e246, e247, e248, e249, \
      e250, e251, e252, e253, e254, e255, e256, e257, e258, e259, \
      e260, e261, e262, e263, e264, e265, e266, e267, e268, e269, \
      e270, e271, e272, e273, e274, e275, e276, e277, e278, e279, \
      e280, e281, e282, e283, e284, e285, e286, e287, e288, e289, \
      e290, e291, e292, e293, e294, e295, e296, e297, e298, e299, \
      e300, e301, e302, e303, e304, e305, e306, e307, e308, e309, \
      e310, e311, e312, e313, e314, e315, e316, e317, e318, e319, \
      e320, e321, e322, e323, e324, e325, e326, e327, e328, e329, \
      e330, e331, e332, e333, e334, e335, e336, e337, e338, e339, \
      e340, e341, e342, e343, e344, e345, e346, e347, e348, e349, \
      e350, e351, e352, e353, e354, e355, e356, e357, e358, e359, \
      e360, e361, e362, e363, e364, e365, e366, e367, e368, e369, \
      e370, e371, e372, e373, e374, e375, e376, e377, e378, e379, \
      e380, e381, e382, e383, e384, e385, e386, e387, e388, e389, \
      e390, e391, e392, e393, e394, e395, e396, e397, e398, e399, \
      e400, e401, e402, e403, e404, e405, e406, e407, e408, e409, \
      e410, e411, e412, e413, e414, e415, e416, e417, e418, e419, \
      e420, e421, e422, e423, e424, e425, e426, e427, e428, e429, \
      e430, e431, e432, e433, e434, e435, e436, e437, e438, e439, \
      e440, e441, e442, e443, e444, e445, e446, e447, e448, e449, \
      e450, e451, e452, e453, e454, e455, e456, e457, e458, e459, \
      e460, e461, e462, e463, e464, e465, e466, e467, e468, e469, \
      e470, e471, e472, e473, e474, e475, e476, e477, e478, e479, \
      e480, e481, e482, e483, e484, e485, e486, e487, e488, e489, \
      e490, e491, e492, e493, e494, e495, e496, e497, e498, e499, \
      e500, e501, e502, e503, e504, e505, e506, e507, e508, e509, \
      e510, e511, e512, e513, e514, e515, e516, e517, e518, e519, \
      e520, e521, e522, e523, e524, e525, e526, e527, e528, e529, \
      e530, e531, e532, e533, e534, e535, e536, e537, e538, e539, \
      e540, e541, e542, e543, e544, e545, e546, e547, e548, e549, \
      e550, e551, e552, e553, e554, e555, e556, e557, e558, e559, \
      e560, e561, e562, e563, e564, e565, e566, e567, e568, e569, \
      e570, e571, e572, e573, e574, e575, e576, e577, e578, e579, \
      e580, e581, e582, e583, e584, e585, e586, e587, e588, e589, \
      e590, e591, e592, e593, e594, e595, e596, e597, e598, e599, \
      e600, e601, e602, e603, e604, e605, e606, e607, e608, e609, \
      e610, e611, e612, e613, e614, e615, e616, e617, e618, e619, \
      e620, e621, e622, e623, e624, e625, e626, e627, e628, e629, \
      e630, e631, e632, e633, e634, e635, e636, e637, e638, e639, \
      e640, e641, e642, e643, e644, e645, e646, e647, e648, e649, \
      e650, e651, e652, e653, e654, e655, e656, e657, e658, e659, \
      e660, e661, e662, e663, e664, e665, e666, e667, e668, e669, \
      e670, e671, e672, e673, e674, e675, e676, e677, e678, e679, \
      e680, e681, e682, e683, e684, e685, e686, e687, e688, e689, \
      e690, e691, e692, e693, e694, e695, e696, e697, e698, e699, \
      e700, e701, e702, e703, e704, e705, e706, e707, e708, e709, \
      e710, e711, e712, e713, e714, e715, e716, e717, e718, e719, \
      e720, e721, e722, e723, e724, e725, e726, e727, e728, e729, \
      e730, e731, e732, e733, e734, e735, e736, e737, e738, e739, \
      e740, e741, e742, e743, e744, e745, e746, e747, e748, e749, \
      e750, e751, e752, e753, e754, e755, e756, e757, e758, e759, \
      e760, e761, e762, e763, e764, e765, e766, e767, e768, e769, \
      e770, e771, e772, e773, e774, e775, e776, e777, e778, e779, \
      e780, e781, e782, e783, e784, e785, e786, e787, e788, e789, \
      e790, e791, e792, e793, e794, e795, e796, e797, e798, e799, \
      e800, e801, e802, e803, e804, e805, e806, e807, e808, e809, \
      e810, e811, e812, e813, e814, e815, e816, e817, e818, e819, \
      e820, e821, e822, e823, e824, e825, e826, e827, e828, e829, \
      e830, e831, e832, e833, e834, e835, e836, e837, e838, e839, \
      e840, e841, e842, e843, e844, e845, e846, e847, e848, e849, \
      e850, e851, e852, e853, e854, e855, e856, e857, e858, e859, \
      e860, e861, e862, e863, e864, e865, e866, e867, e868, e869, \
      e870, e871, e872, e873, e874, e875, e876, e877, e878, e879, \
      e880, e881, e882, e883, e884, e885, e886, e887, e888, e889, \
      e890, e891, e892, e893, e894, e895, e896, e897, e898, e899, \
      e900, e901, e902, e903, e904, e905, e906, e907, e908, e909, \
      e910, e911, e912, e913, e914, e915, e916, e917, e918, e919, \
      e920, e921, e922, e923, e924, e925, e926, e927, e928, e929, \
      e930, e931, e932, e933, e934, e935, e936, e937, e938, e939, \
      e940, e941, e942, e943, e944, e945, e946, e947, e948, e949, \
      e950, e951, e952, e953, e954, e955, e956, e957, e958, e959, \
      e960, e961, e962, e963, e964, e965, e966, e967, e968, e969, \
      e970, e971, e972, e973, e974, e975, e976, e977, e978, e979, \
      e980, e981, e982, e983, e984, e985, e986, e987, e988, e989, \
      e990, e991, e992, e993, e994, e995, e996, e997, e998, e999, \
      size, ...) \
   size

#endif 
